ngl: Fix a rare assertion violation
authorMatthias Clasen <mclasen@redhat.com>
Tue, 13 Apr 2021 02:51:01 +0000 (22:51 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 13 Apr 2021 02:53:48 +0000 (22:53 -0400)
When we clean up the uniform allocations after a frame,
it can happen that our space requirements actually increase,
due to padding that depends on the order of allocations.

Instead of asserting that it doesn't happen, just make
it work by growing our allocation.

Fixes: #3853
gsk/ngl/gskngluniformstate.c

index 44270e8fa5482a920a6f4a7a0b966e56afbb6a0e..9a70088779233c75ac4b70dff398cafd74861782 100644 (file)
@@ -215,7 +215,17 @@ gsk_ngl_uniform_state_end_frame (GskNglUniformState *state)
 
   state->values_pos = allocator;
 
-  g_assert (allocator <= state->values_len);
+  /* It can happen that our space requirements grow due to
+   * difference in order increasing padding. As a pragmatic
+   * solution to this, just increase the allocation to cover
+   * the predefined mappins.
+   */
+  if (allocator > state->values_len)
+    {
+      while (allocator > state->values_len)
+        state->values_len *= 2;
+      state->values_buf = g_realloc (state->values_buf, state->values_len);
+    }
 
   memset (state->apply_hash, 0, sizeof state->apply_hash);
 }